package com.btcode.netty.server.handler.decode;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;

//定义协议时可能内容本身具有分隔符，可以先按base64编码 Base64Decoder
public class SimpleDelimiterFrameDecoder extends DelimiterBasedFrameDecoder {

    /*
    maxLength：
    表示一行最大的长度，如果超过这个长度依然没有检测到\n或者\r\n，将会抛出TooLongFrameException
    failFast：
    与maxLength联合使用，表示超过maxLength后，抛出TooLongFrameException的时机。如果为true，则超出maxLength后立即抛出TooLongFrameException，不继续进行解码；如果为false，则等到完整的消息被解码后，再抛出TooLongFrameException异常。
    stripDelimiter：
    解码后的消息是否去除分隔符。
    delimiters：
    分隔符。我们需要先将分割符，写入到ByteBuf中，然后当做参数传入。
     */
    public SimpleDelimiterFrameDecoder(int maxFrameLength, boolean stripDelimiter, boolean failFast, String... delimiters) {
        super(maxFrameLength, stripDelimiter, failFast, getByteBufs(delimiters));
    }

    private static ByteBuf[] getByteBufs(String... delimiters) {
        ByteBuf[] bbs = new ByteBuf[delimiters.length];
        for (int i = 0; i < delimiters.length; i++) {
            bbs[i] = Unpooled.copiedBuffer(delimiters[i].getBytes());
        }
        return bbs;
    }
}
